/**
 * @module 进行事件、更新、绘制命令颁发的接口，接收到分发命令的精灵都存储在ISpriteContainer容器中
 * @author 姬广杰
 * IDispatcher接口中所有的方法都是针对ISpriteContainer进行操作的，接收到分发命令的精灵都存储在ISpriteContainer容器中。
 */

import ISpriteContainer from "./ISpriteContainer";
import CanvasMouseEvent from "../events/CanvasMouseEvent";
import CanvasKeyBoardEvent from "../events/CanvasKeyBoardEvent";

export default interface IDispatcher {
    // 只读的类型为ISpriteContainer的成员变量
    // 本接口中所有的dispatch开头的方法都是针对ISpriteContainer接口进行遍历操作
    readonly container: ISpriteContainer;
    // 遍历ISpriteContainer容器，进行精灵的update分发
    dispatchUpdate(msec: number, diffSec: number): void;
    // 遍历ISpriteContainer容器，进行精灵的render分发
    dispatchDraw(context: CanvasRenderingContext2D): void;
    // 遍历ISpriteContainer容器，进行精灵的鼠标事件分发
    dispatchMouseEvent(evt: CanvasMouseEvent): void;
    // 遍历ISpriteContainer容器，进行精灵的键盘事件分发
    dispatchKeyEvent(evt: CanvasKeyBoardEvent): void;
}